setTimeout(() => {
  // 加入宏队列1
  console.log("setTimeOut");
}, 0);
console.log("script start");
async function async1() {
  console.log("async1 start");
  await async2();
  console.log("async1 end"); // 加入微队列2
}
async function async2() {
  console.log("async2 end");
}
// Promise
new Promise((resolve, reject) => {
  console.log("promise");
  for (var index = 0; index < 1000; index++) {
    if (index === 10) {
      console.log("3");
    }
    index == 9999 && resolve("4");
  }
  resolve();
})
  .then((val) => {
    // 加入微队列1
    console.log(val, "值");
    console.log("promise1");
  })
  .then((res) => {
    // 加入微队列3
    console.log(res);
    console.log("promise2");
  });

// 同步promise
async1();

console.log("script end");
setInterval
// "script start";console.log("promise");console.log("3"); console.log("async1 start");console.log("async2 end");console.log("async1 end");console.log('script end');console.log('undefined');console.log("promise2");

// 注意点  async修饰符只是将这个函数变成同步的promise函数，还是同步执行
//        直到碰到await 先将await 紧跟的语句执行完，下一行之后的语句全放到微队列里
//        反复的.then.then第一个点then会立刻放到微队列，第二个点then会等同步执行
//        完之后再放
